package com.appredes.model;

/**
 * @author David Cuellar
 * @version 1.0
 * @created 22-oct-2011 06:39:28 p.m.
 */
public class InternetProtocol {

	private short octeto1;
	private short octeto2;
	private short octeto3;
	private short octeto4;
	public Ranges myRanges;
	public SubNeting mySubNeting;

	public InternetProtocol(){
            
            myRanges = new Ranges();
	}

	public void finalize() throws Throwable {

	}

    public short getOcteto1() {
        return this.octeto1;
    }

    public void setOcteto1(short octeto1) {
        this.octeto1 = octeto1;
    }

    public short getOcteto2() {
        return octeto2;
    }

    public void setOcteto2(short octeto2) {
        this.octeto2 = octeto2;
    }

    public short getOcteto3() {
        return octeto3;
    }

    public void setOcteto3(short octeto3) {
        this.octeto3 = octeto3;
    }

    public short getOcteto4() {
        return octeto4;
    }

    public void setOcteto4(short octeto4) {
        this.octeto4 = octeto4;
    }
        
        
        
	/**
	 * Devuelve el tipo de Clase al que pertenece la IP.
	 */
	public String getClassType(){
            
            if(this.octeto1 <= 127)
                return "Clase A";
            if(this.octeto1 >= 128 && this.octeto1 <= 191)
                return "Clase B";
            if(this.octeto1 >= 192 && this.octeto1 <= 223)
                return "Clase C";
            if(this.octeto1 >= 224 && this.octeto1 <= 239)
                return "Clase D";
            if(this.octeto1 >= 240 && this.octeto1 <= 255)
                return "Clase E";
            
            return "IP No Valida";
	}

	/**
	 * Devuelve el rango de direcciones de la Clase a la que pertenece la IP.
	 */
	public String getRangeOfAddress(){
            
            if(this.octeto1 <= 127)
                return myRanges.getRangeClass(0);
            if(this.octeto1 >= 128 && this.octeto1 <= 191)
                return myRanges.getRangeClass(1);
            if(this.octeto1 >= 192 && this.octeto1 <= 223)
                return myRanges.getRangeClass(2);
            if(this.octeto1 >= 224 && this.octeto1 <= 239)
                return myRanges.getRangeClass(3);
            if(this.octeto1 >= 240 && this.octeto1 <= 255)
                return myRanges.getRangeClass(4);
            
            return "IP No Valida";
            
	}

	/**
	 * Devuelve el numero de Redes posibles en la Clase de Red a la que pertenece la
	 * IP.
	 */
	public int getNumberOfNets(){
            
            if(this.octeto1 <= 127)
                return myRanges.getNumberOfNets(0);
            if(this.octeto1 >= 128 && this.octeto1 <= 191)
                return myRanges.getNumberOfNets(1);
            if(this.octeto1 >= 192 && this.octeto1 <= 223)
                return myRanges.getNumberOfNets(2);
            if(this.octeto1 >= 224 && this.octeto1 <= 239)
                return myRanges.getNumberOfNets(3);
            if(this.octeto1 >= 240 && this.octeto1 <= 255)
                return myRanges.getNumberOfNets(4);
            
            return -1;
	}

	/**
	 * Devuelve el numero de redes posibles segun la Clase de Red a la que pertenece
	 * la IP.
	 */
	public int getNumberOfHosts(){
            
            if(this.octeto1 <= 127)
                return myRanges.getNumberofHosts(0);
            if(this.octeto1 >= 128 && this.octeto1 <= 191)
                return myRanges.getNumberofHosts(1);
            if(this.octeto1 >= 192 && this.octeto1 <= 223)
                return myRanges.getNumberofHosts(2);
            if(this.octeto1 >= 224 && this.octeto1 <= 239)
                return myRanges.getNumberofHosts(3);
            if(this.octeto1 >= 240 && this.octeto1 <= 255)
                return myRanges.getNumberofHosts(4);
            
            return -1;
	}

	/**
	 * Devulve el Tipo de Mascara de Red de la Direccion IP.
	 */
	public String getMask(){
            
            if(this.octeto1 <= 127)
                return myRanges.getTypeOfMask(0);
            if(this.octeto1 >= 128 && this.octeto1 <= 191)
                return myRanges.getTypeOfMask(1);
            if(this.octeto1 >= 192 && this.octeto1 <= 223)
                return myRanges.getTypeOfMask(2);
            if(this.octeto1 >= 224 && this.octeto1 <= 239)
                return myRanges.getTypeOfMask(3);
            if(this.octeto1 >= 240 && this.octeto1 <= 255)
                return myRanges.getTypeOfMask(4);
            
            return "IP No Valida";
	}

	/**
	 * Devueve el ID del Broadcast de la Clase de Red a la que pertenece la direccion
	 * IP.
	 */
	public String getBroadcatsID(){
		return "";
	}

	/**
	 * Devuelve verdadero si la direccion IP es privada.
	 */
	public boolean isPrivate(){
		return false;
	}

	/**
	 * Devuelve verdadero si la direccion IP es publica
	 */
	public boolean isPublic(){
		return false;
	}

	/**
	 * Devuelve el tipo de Direccion al que pertenece la IP. Publica o Privada.
	 */
	public String getAccesLevel(){
		return "";
	}
}//end InternetProtocol

